package com.tsd.system.dao;

import com.tsd.core.vo.PageBean;
import org.apache.ibatis.annotations.Param;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

public interface SqlSelectMapper {

    /**
     * 通过主键删除数据
     *
     * @param sql
     * @return 影响行数
     */
    int delete(@Param("sql") String sql);

    /**
     * 新增数据
     *
     * @param sql
     * @return 影响行数
     */
    int insert(@Param("sql") String sql);

    /**
     * 新增数据
     *
     * @param params 对象，必须含有一个sql值，其他是对应的数据库值
     * @return 影响行数
     */
    int insertByParams(@Param("params") Map<String, Object> params);

    /**
     * 修改数据
     *
     * @param sql
     * @return 影响行数
     */
    int update(@Param("sql") String sql);

    /**
     * 修改数据
     *
     * @param params
     * @return 影响行数
     */
    int updateByParams(@Param("params") Map<String, Object> params);

    List<LinkedHashMap<String, Object>> select(@Param("sql") String sql);

    List<LinkedHashMap<String, Object>> sqlSelect(@Param("sql") String sql, @Param("page") PageBean page);

    List<LinkedHashMap<String, Object>> sqlSelectByPage(@Param("sql") String sql, @Param("page") PageBean page);

    List<LinkedHashMap<String, Object>> sqlSelectParamsByPage(@Param("params") Map<String, Object> params, @Param("page") PageBean page);

    List<LinkedHashMap<String, Object>> selectByParams(@Param("params") Map<String, Object> params);

    LinkedHashMap<String, Object> countByParams(@Param("params") Map<String, Object> params);

    /**
     * 判断数据库是否存在
     *
     * @param dbName
     * @return
     */
    int isDbExist(@Param("dbName") String dbName);

    /**
     * 判断表是否存在
     *
     * @param tableName
     * @return
     */
    int isTableExist(@Param("tableName") String tableName);

    /**
     * 判断表的字段是否存在
     *
     * @param tableName
     * @param columnName
     * @return
     */
    int isTableColumnExist(@Param("tableName") String tableName, @Param("columnName") String columnName);
}
